#include "lpt.hpp"
#include "lpt_error.hpp"
#include "lpt_pkobj.hpp"

pkobject::pkobject(string srcurl){
    string tmp;
    ifstream fin;
    fin.open(srcurl.c_str(),ios::in);
    if(fin.is_open()==0) lpt_error("不能正确地找到软件包，请提升权限或检查软件包完整性");
    
    //获取包的相关信息
        //包名
    while(tmp != "name:"){
        fin>>tmp;
        if(fin.eof()) lpt_error("残缺的软件包：缺少软件包名称");
    }
    fin>>pkname;
        //版本号
    while(tmp != "version:"){
        fin>>tmp;
        if(fin.eof()) lpt_error("残缺的软件包：缺少版本信息");
    }
    fin>>tmp;
    sumversion(tmp);
        //包平台
    while(tmp != "platform:"){
        fin>>tmp;
        if(fin.eof()) lpt_error("残缺的软件包：缺少平台相关信息");
    }
    getline(fin,tmp);
    setplat(tmp);
        //包依赖
    while(tmp != "depend:"){
        fin>>tmp;
        if(fin.eof()) lpt_error("残缺的软件包：缺少依赖项相关信息");
    }
    getline(fin,tmp);
    setdepend(tmp);
    fin.close();
}
void pkobject::sumversion(string str){
    int v[3];
    int ptr=0;
    string tmp;
    for(int i=0;i<str.length();i++){
        switch(str[i]){
            case '.': 
                v[ptr++] = atoi(tmp.c_str());
                tmp="";
                break;
            default:
                tmp += str[i];
        }
    }
    v[ptr] = atoi(tmp.c_str());
    version = v[0]*32*32+v[1]*32+v[2];
}
void pkobject::setdepend(string str){
    string tmp;
    for(int i=0;i<str.length();i++){
        switch(str[i]){
            case ' ': continue;
            case ',': 
                pkdepend.push_back(tmp);
                tmp = "";
                break;
            default:
                tmp+=str[i];
        }
    }
    pkdepend.push_back(tmp);
}
void pkobject::setplat(string str){
    string tmp;
    for(int i=0;i<str.length();i++){
        switch(str[i]){
            case ' ': continue;
            case ',': 
                pkplat.push_back(tmp);
                tmp = "";
                break;
            default:
                tmp+=str[i];
        }
    }
    pkplat.push_back(tmp);
}

